package done.easy_801_900;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

/**
 * 832. Flipping an Image 翻转图像
 * <p>
 * 给定一个二进制矩阵 A，我们想先水平翻转图像，然后反转图像并返回结果。
 * 水平翻转图片就是将图片的每一行都进行翻转，即逆序。例如，水平翻转
 * [1, 1, 0] 的结果是 [0, 1, 1]。
 * 反转图片的意思是图片中的 0 全部被 1 替换， 1 全部被 0 替换。例如，
 * 反转 [0, 1, 1] 的结果是 [1, 0, 0]。
 * <p>
 * 示例 1:
 * 输入: [[1,1,0],
 * [1,0,1],
 * [0,0,0]]
 * <p>
 * 输出: [[1,0,0],
 * [0,1,0],
 * [1,1,1]]
 * <p>
 * 解释: 首先翻转每一行: [[0,1,1],[1,0,1],[0,0,0]]；
 * 然后反转图片: [[1,0,0],[0,1,0],[1,1,1]]
 * <p>
 * 示例 2:
 * 输入: [[1,1,0,0],
 * [1,0,0,1],
 * [0,1,1,1],
 * [1,0,1,0]]
 * <p>
 * 输出: [[1,1,0,0],
 * [0,1,1,0],
 * [0,0,0,1],
 * [1,0,1,0]]
 * <p>
 * 解释: 首先翻转每一行: [[0,0,1,1],
 * [1,0,0,1],
 * [1,1,1,0],
 * [0,1,0,1]]；
 * <p>
 * 然后反转图片: [[1,1,0,0],
 * [0,1,1,0],
 * [0,0,0,1],
 * [1,0,1,0]]
 *
 * @author 大硕
 * 2019-04-02 11:42 PM
 **/
@Slf4j
public class FlippingAnImage {

    @SuppressWarnings("all")
    public int[][] flipAndInvertImage(int[][] A) {
        // 190403 first
        return null;
    }

    @Test
    public void test() {
        log.info("-------------------");
//        int[][] A = new int[][]{
//                {1, 1, 0},
//                {1, 0, 1},
//                {0, 0, 0}
//        };
        int[][] A = new int[][]{
                {1, 1, 0, 0},
                {1, 0, 0, 1},
                {0, 1, 1, 1},
                {1, 0, 1, 0}
        };
        for (int i = 0; i < A.length; i++) {
            if (i == A.length - 1) {
                log.info("{} 翻转前", A[i]);
            } else {
                log.info("{}", A[i]);
            }
        }
        log.info("-------------------");
        int[][] arr = flipAndInvertImage(A);
        for (int i = 0; i < arr.length; i++) {
            if (i == 0) {
                log.info("{} 翻转后", arr[i]);
            } else {
                log.info("{}", arr[i]);
            }
        }
        log.info("-------------------");
    }
}




























/*
public int[][] flipAndInvertImage(int[][] A) {
    if (A == null || A.length == 0) {
        return new int[0][0];
    }

    int len = A.length;
    int[][] ans = new int[len][len];

    for (int i = 0; i < len; i++) {
        for (int j = 0; j < len; j++) {
            // 1. 异或等于值翻转
            // 2. len-1-j 和 j 是对称的坐标
            ans[i][j] = A[i][len-1-j] ^ 1;
        }
    }
    return ans;
}
*/
